package utils

import (
	"encoding/json"
	"fmt"
	"io"
	"less_day/internal/config"
	"net/http"
)

// 获取配置信息
func GetConfig() (*config.Config, error) {
	return config.LoadConfig()
}

// 测试微信API连接
func TestWechatAPI() error {
	cfg, err := config.LoadConfig()
	if err != nil {
		return fmt.Errorf("加载配置失败: %v", err)
	}

	// 使用测试code调用微信API
	testCode := "test_code_for_debugging"
	url := fmt.Sprintf("https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code",
		cfg.Wechat.AppID, cfg.Wechat.Secret, testCode)

	resp, err := http.Get(url)
	if err != nil {
		return fmt.Errorf("HTTP请求失败: %v", err)
	}
	defer resp.Body.Close()

	body, err := io.ReadAll(resp.Body)
	if err != nil {
		return fmt.Errorf("读取响应失败: %v", err)
	}

	var result map[string]interface{}
	if err := json.Unmarshal(body, &result); err != nil {
		return fmt.Errorf("解析JSON失败: %v", err)
	}

	// 检查返回的错误码
	if errcode, exists := result["errcode"]; exists {
		if errcode != 0.0 {
			return fmt.Errorf("微信API错误: %v", result["errmsg"])
		}
	}

	return nil
}

// 验证配置完整性
func ValidateConfig() error {
	cfg, err := config.LoadConfig()
	if err != nil {
		return fmt.Errorf("配置加载失败: %v", err)
	}

	// 检查微信配置
	if cfg.Wechat.AppID == "" {
		return fmt.Errorf("微信AppID未配置")
	}

	if cfg.Wechat.Secret == "" || cfg.Wechat.Secret == "your_wechat_secret" {
		return fmt.Errorf("微信Secret未正确配置")
	}

	// 检查数据库配置
	if cfg.Database.Host == "" {
		return fmt.Errorf("数据库主机未配置")
	}

	// 检查Redis配置
	if cfg.Redis.Host == "" {
		return fmt.Errorf("Redis主机未配置")
	}

	return nil
}
